package com.aqumon.www.service;

import com.aqumon.www.entity.dto.JenkinsBuildInfoDto;
import com.aqumon.www.entity.dto.JenkinsJobBuildDto;
import com.aqumon.www.entity.persistent.JenkinsConfig;
import com.aqumon.www.entity.persistent.Script;
import com.aqumon.www.entity.request.jenkins.*;
import com.aqumon.www.entity.response.controller.PageModule;
import com.aqumon.www.entity.response.jenkins.BuildResp;

import java.util.List;

public  interface JenkinsService {

    /**
     * 保存jenkins服务器配置
     * @return List<BuildResp>
     */
    int saveConfig(ConfigCreateReq configCreateReq);

    /**
     * 编辑jenkins服务器配置
     * @return message
     */
    int editConfig(ConfigEditReq configEditReq);

    /**
     * 删除jenkins服务器配置
     * @return message
     */
    int deleteConfig(ConfigDeleteReq deleteConfigReq);

    /**
     * 获取所有jenkins配置
     * @return List<BuildResp>
     */
    List<JenkinsConfig> listAllConfig();

    /**
     * 创建job（仅QA平台保存，需要在jenkins服务器创建job）
     * @return List<BuildResp>
     */
    boolean createJob(JobCreateReq jobCreateReq);

    boolean editJob(JobCreateReq jobCreateReq);

    /**
     * 删除job（慎用，会从jenkins删除job）
     * @return List<BuildResp>
     */
    boolean deleteJobFromJenkins(JobBasicReq jobBasicReq);

    /**
     * 删除job（仅删除平台存储的job）
     * @return List<BuildResp>
     */
    boolean deleteJob(JobBasicReq jobBasicReq);

    /**
     * 获取job参数，无参数返回null
     * @return List<BuildResp>
     */
    List<JenkinsJobBuildDto> getJobConfig(String jenkinsName, String jobFullName);

    /**
     *通过 jenkins api 获取指定job构建历史
     * @return List
     * @param buildQueryReq
     */
    PageModule<BuildResp> getAllBuilds(BuildQueryReq buildQueryReq);

    /**
     * 获取所有jobs
     * @return List<>
     * @param jenkinsId
     */
    List<Script> getAllJobs(Long jenkinsId);

    /**
     * 获取指定buildNumber构建基本信息
     */
    JenkinsBuildInfoDto getBuildInfo(String jenkinsName, String jobFullName, Long buildNumber);

    /**
     * 获取指定buildNumber构建日志
     */
    String getBuildLog(String jenkinsName, String jobFullName, Long buildNumber);

    /**
     * 停止最后构建的 Job Build
     */
    String stopLastJobBuild(JobBasicReq jobBasicReq);

    /**
     * 构建job
     * @return List<BuildResp>
     */
    boolean buildJob(JobBuildReq jobBuildReq);

    /**
     * 获取构建历史
     * @return List<BuildResp>
     */
    boolean disableJob(JobBasicReq jobBasicReq);

    /**
     * 获取构建历史
     * @return List<BuildResp>
     */
    boolean enableJob(JobBasicReq jobBasicReq);
}
